package com.naiterui.ehp.bs.doctor.utils;

import com.naiterui.ehp.bp.constants.CommonConstant;

import java.util.Arrays;

public class VersionUtil {

    // 1.3.0版本在使用接口时，医生app端医生禁用和科室列表使用最新的接口。且原1.2保持使用旧接口可以正常使用。
    public static final Integer VERSION_13 = 130;
    public static final Integer VERSION_15 = 150;

    public static final String VERSION_1_0_0 = "1.0.0";
    public static final String VERSION_H5 = "0";

    public static boolean compareVerName(String curVersionName, String versionName) {
        // 比较当前用户版本curVersionName小于系统版本versionName
        return compareVersion(curVersionName, versionName) < 0;
    }

    public static boolean compareGteVersion(String curVersionName, String versionName) {
        // 比较当前用户版本curVersionName大于等于系统版本versionName
        return compareVersion(curVersionName, versionName) >= 0;
    }

    /***
     * 比较版本大小
     * @param systemVersion 系统版本
     * @param customVersion 用户版本
     * @return 如果系统版本小于用户版本返回-1，如果系统大于用户版本返回1。
     */
    public static int compareVersion(String systemVersion, String customVersion) {
        String[] systemArr = systemVersion.split("\\.");
        String[] customArr = customVersion.split("\\.");
        // 如果用户版本customArr比系统的版本systemArr字符数组长度小，则使用0补充长度至值相同
        if (customArr.length < systemArr.length) {
            String[] newCurArr = new String[systemArr.length];
            Arrays.fill(newCurArr, "0");
            System.arraycopy(customArr, 0, newCurArr, 0, customArr.length);
            customArr = newCurArr;
        } else if (customArr.length > systemArr.length) {
            String[] newSystemArr = new String[customArr.length];
            Arrays.fill(newSystemArr, "0");
            System.arraycopy(systemArr, 0, newSystemArr, 0, systemArr.length);
            systemArr = newSystemArr;
        }
        for (int i = 0; i < systemArr.length; i++) {
            int curVer = Integer.parseInt(systemArr[i]);
            int ver = Integer.parseInt(customArr[i]);
            if (curVer < ver) {
                return -1;
            } else if (curVer > ver) {
                return 1;
            }
        }
        return 0;
    }

    public static boolean compareDoctorVerNameAndPlat(String curVersionName, String curPlatform) {
        String checkVerKey = CommonConstant.DR_FORCE_VERSION_KEY + curPlatform;
        // 从缓存中获取默认的升级版本号
        String checkVersion = RedisUtils.getString(checkVerKey);
        if (checkVersion == null) {
            checkVersion = VERSION_1_0_0;
        }
        return compareVerName(curVersionName, checkVersion);
    }

    public static boolean comparePharmacistVerNameAndPlat(String curVersionName, String curPlatform) {
        String checkVerKey = CommonConstant.PH_FORCE_VERSION_KEY + curPlatform;
        // 从缓存中获取默认的升级版本号
        String checkVersion = RedisUtils.getString(checkVerKey);
        if (checkVersion == null) {
            checkVersion = VERSION_1_0_0;
        }
        return compareVerName(curVersionName, checkVersion);
    }

    public static String getRedisForceVersionKey(String appPlat) {
        return CommonConstant.PH_FORCE_VERSION_KEY + appPlat;
    }

}
